Excelにあるピボットテーブルのような表を作成
例)レストランにおけるチップ金額のデータ
total_bill : 飲食代(税込)
tip : チップの金額
sex : 性別(Male,Female)
smoker : 喫煙者がいたかどうか(Yes,No)
day : 曜日(Thur,Fri,Sat,Sun)
time : 時間帯(Lunch,Dinner)
size : グループの人数
library(reshape2)
data(tips)
head(tips)
## total_bill tip sex smoker day time size
## 1 16.99 1.01 Female No Sun Dinner 2
## 2 10.34 1.66 Male No Sun Dinner 3
## 3 21.01 3.50 Male No Sun Dinner 3
## 4 23.68 3.31 Male No Sun Dinner 2
## 5 24.59 3.61 Female No Sun Dinner 4
## 6 25.29 4.71 Male No Sun Dinner 4
チップ金額を金額別に階級分けして、他の変数とのピボットテーブルを作成
tips$y <- cut(tips$tip, breaks = c(0, 2, 4, 6, 8, 10)) # tipsを階級分け
table(tips$y)
##
## (0,2] (2,4] (4,6] (6,8] (8,10]
## 78 125 34 5 2
ピボットテーブル(度数)の作成
acast(tips, y ~ sex + smoker, length)
## Using y as value column: use value.var to override.
## Female_No Female_Yes Male_No Male_Yes
## (0,2] 19 9 29 21
## (2,4] 27 19 49 30
## (4,6] 8 4 15 7
## (6,8] 0 1 3 1
## (8,10] 0 0 1 1
セルごとに指定した変数の総和や平均などを求めたい場合は,
value.varで変数名を指定する
acast(tips, y ~ sex + smoker, sum, value.var = "total_bill")
## Female_No Female_Yes Male_No Male_Yes
## (0,2] 244.9 106.21 374.21 345.33
## (2,4] 484.4 354.37 943.02 742.74
## (4,6] 248.3 104.52 432.20 175.02
## (6,8] 0.0 28.17 121.99 23.17
## (8,10] 0.0 0.00 48.33 50.81
3次元のクロス表にしたい場合
acast(tips, y ~ sex ~ smoker, sum, value.var = "total_bill")
## , , No
##
## Female Male
## (0,2] 244.9 374.21
## (2,4] 484.4 943.02
## (4,6] 248.3 432.20
## (6,8] 0.0 121.99
## (8,10] 0.0 48.33
##
## , , Yes
##
## Female Male
## (0,2] 106.21 345.33
## (2,4] 354.37 742.74
## (4,6] 104.52 175.02
## (6,8] 28.17 23.17
## (8,10] 0.00 50.81